/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.claro.administracionSolicitudes.entity;

import co.com.claro.administracionSolicitudes.entity.enums.MovimientosEnum;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Mike
 */
@Entity
@Table(name = "PERFIL")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Perfil.findAll", query = "SELECT p FROM Perfil p"),
    @NamedQuery(name = "Perfil.findByIdPerfil", query = "SELECT p FROM Perfil p WHERE p.idPerfil = :idPerfil"),
    @NamedQuery(name = "Perfil.findByNombre", query = "SELECT p FROM Perfil p WHERE p.nombre = :nombre"),
    @NamedQuery(name = "Perfil.findPerfilByEstado", query = "SELECT p FROM Perfil p WHERE p.activo = :activo")})
public class Perfil extends EntidadBase implements Serializable {
    @OneToMany(mappedBy = "perfil")
    private List<Solicitud> solicitudList;
    @Basic(optional = false)
    @Column(name = "ACTIVO")
    private short activo;
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID_PERFIL")
    @SequenceGenerator(name="seqPerfil",sequenceName = "PERFIL_SEQ",allocationSize=1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "seqPerfil")
    private Integer idPerfil;
    @Basic(optional = false)
    @Size(min = 1, max = 100)
    @Column(name = "NOMBRE")
    private String nombre;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idPerfil",fetch = FetchType.LAZY)
    private List<PrivilegioSolicitud> privilegioSolicitudList;

    public Perfil() {
    }

    public Perfil(Integer idPerfil) {
        this.idPerfil = idPerfil;
    }

    public Perfil(Integer idPerfil, String nombre) {
        this.idPerfil = idPerfil;
        this.nombre = nombre;
    }

    public Integer getIdPerfil() {
        return idPerfil;
    }

    public void setIdPerfil(Integer idPerfil) {
        this.idPerfil = idPerfil;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @XmlTransient
    public List<PrivilegioSolicitud> getPrivilegioSolicitudList() {
        return privilegioSolicitudList;
    }

    public void setPrivilegioSolicitudList(List<PrivilegioSolicitud> privilegioSolicitudList) {
        this.privilegioSolicitudList = privilegioSolicitudList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPerfil != null ? idPerfil.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Perfil)) {
            return false;
        }
        Perfil other = (Perfil) object;
        if ((this.idPerfil == null && other.idPerfil != null) || (this.idPerfil != null && !this.idPerfil.equals(other.idPerfil))) {
            return false;
        }
        return true;
    }

    @Override
    public HistoricoParametros crearHistorico(EntidadBase entidadBase, MovimientosEnum movimientosEnum) {
        Perfil perfil = null;
        if(entidadBase instanceof Perfil){
            perfil = (Perfil)entidadBase;
        }
        
        HistoricoParametros historico = new HistoricoParametros();
        Calendar fechaActual = Calendar.getInstance();
        StringBuilder descripcion = new StringBuilder();
        
        descripcion.append(movimientosEnum.getNombre());
        descripcion.append(" ");
        descripcion.append(perfil.obtenerNombreClase());
        descripcion.append(" ");
        descripcion.append(perfil.getNombre());
        
        historico.setUsuario(perfil.getUsuario());
        historico.setFechaMovimiento(new Date(fechaActual.getTimeInMillis()));
        historico.setDescripcion(descripcion.toString());
        
        return historico;
    }
    
    @Override
    public String toString() {
        return "co.com.claro.adminSolicitudes.entities.Perfil[ idPerfil=" + idPerfil + " ]";
    }

    public short getActivo() {
        return activo;
    }

    public void setActivo(short activo) {
        this.activo = activo;
    }

    @Override
    public String obtenerNombreClase() {
        return "Perfil";
    }

    @XmlTransient
    public List<Solicitud> getSolicitudList() {
        return solicitudList;
    }

    public void setSolicitudList(List<Solicitud> solicitudList) {
        this.solicitudList = solicitudList;
    }
    
}
